package com.hsurosy.hsuchain.nft.order.domain.entity.convertor;

import com.hsurosy.hsuchain.nft.api.order.model.TradeOrderVO;
import com.hsurosy.hsuchain.nft.api.order.request.OrderCreateRequest;
import com.hsurosy.hsuchain.nft.order.domain.entity.TradeOrder;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.NullValueCheckStrategy;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 交易订单转换器
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 17:04
 * @Description
 * @Version: v1.0.0
 */
@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
public interface TradeOrderConvertor {

    /**
     * 实例化转换器
     */
    TradeOrderConvertor INSTANCE = Mappers.getMapper(TradeOrderConvertor.class);

    /**
     * 将订单创建请求转换为交易订单实体
     *
     * @param request 订单创建请求对象
     * @return 交易订单实体
     */
    TradeOrder mapToEntity(OrderCreateRequest request);

    /**
     * 将交易订单实体转换为交易订单VO
     *
     * @param request 交易订单实体
     * @return 交易订单VO
     */
    @Mapping(target = "timeout", expression = "java(request.isTimeout())")
    TradeOrderVO mapToVo(TradeOrder request);

    /**
     * 将交易订单实体列表转换为交易订单VO列表
     *
     * @param request 交易订单实体列表
     * @return 交易订单VO列表
     */
    List<TradeOrderVO> mapToVo(List<TradeOrder> request);
}
